﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace SeizyUtils.Common.Data.Database
{
    /// <summary>
    /// DBアクセスの機能をまとめたインターフェースです。
    /// 
    /// </summary>
    interface IDatabaseManager
    {
        /// <summary>
        /// 内部にコネクションを生成します。
        /// </summary>
        void connection();

        /// <summary>
        /// コネクションを破棄します。
        /// </summary>
        void disConnect();

        /// <summary>
        /// トランザクションを開始します。
        /// </summary>
        void beginTransaction();

        /// <summary>
        /// コミットします。
        /// </summary>
        void commit();

        /// <summary>
        /// ロールバックします。
        /// </summary>
        void rollback();

        /// <summary>
        /// 検索クエリを実行し、指定されたビーンクラスにバインドして返します。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <param name="param"></param>
        /// <param name="bindedObject"></param>
        /// <returns></returns>
        IList<T> executeQuery<T>(IQuery query, QueryParam param, T bindedObject) where T : IBean;

        /// <summary>
        /// 検索クエリを実行し、結果を返します。
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        IList<IDBRecord> executeQuery(IQuery query, QueryParam param);

        /// <summary>
        /// 検索クエリを実行し、件数を返します。
        /// </summary>
        /// <param name="query"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        int executeScalar(IQuery query, QueryParam param);

        /// <summary>
        /// SQL ステートメントを実行し、影響を受けた行数を返します。
        /// </summary>
        /// <param name="query"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        int executeNonQuery(IQuery query, QueryParam param);
    }
}
